"""
执行测试用例并生成Allure测试报告
步骤：
   1. 定义测试用例路径和报告输出路径
   2. 调用pytest执行测试用例并生成Allure原始数据
   3. 根据测试结果判断是否生成HTML报告
"""

import os
import shutil

import pytest


def run_test():
    test_directory = "./test"  # 指定要执行测试的测试用例目录
    allure_report_directory = "./report/temp_jsonreport"  # 指定生成json数据保存目录
    html_report_directory = "./report/html"  # 指定生成html测试报告报错目录

    if os.path.exists(allure_report_directory):         #  json_data  历史json数据保存目录
        shutil.rmtree(allure_report_directory)  # 删除目录及其内容
    os.makedirs(allure_report_directory, exist_ok=True)  # 重新创建空目录

    # run.py
    # ...
    # 只运行标记为 "业务流程" 的用例
    result = pytest.main([test_directory, '-svv', '-n3', "-m 业务流程", '--alluredir', allure_report_directory])
    # ...
    result = pytest.main([test_directory, '-svv','-n5',"-m 登录成功", '--alluredir', allure_report_directory])
    # 执行pytest命令，参数说明：
    # test_directory：指定要执行的测试用例所在目录
    # -s：显示测试用例中的打印输出
    # -v：显示详细的测试执行日志
    # --alluredir：指定Allure原始报告的输出目录
    # -x：快速失败，遇到失败用例直接结束测试
    # --reruns 5：在遇到执行失败的用例后重试5次

    if result == 0:
        # 检查pytest执行结果
        # 0：所有测试通过（Success）。
        # 1：至少有一个测试失败（Failure）。仅限于断言错误
        # 2：测试被用户中断（Interrupted），如按 Ctrl+C。
        # 3：执行测试时发生内部错误（Error）。
        # 4：pytest 命令行参数错误（Usage Error）。
        # 5：未找到测试用例（No Tests Collected）。

        print("所有用例全部执行通过，正在生成Allure HTML报告...")
        os.system(f'allure generate {allure_report_directory} -o {html_report_directory} --clean')
        # 生成Allure HTML报告：
        # allure generate：Allure命令，用于将原始数据生成HTML报告
        # {allure_report_directory}：原始数据目录
        # -o {html_report_directory}：指定HTML报告输出目录
        # --clean：清除目标目录中已存在的报告（避免残留旧数据）
    elif result == 1:
        print("有用例实际结果与预期结果不符，正在生成Allure HTML报告...")
        os.system(f'allure generate {allure_report_directory} -o {html_report_directory} --clean')
    else:
        print("测试执行失败，请检查日志。")

if __name__ == '__main__':
    run_test()